/*!
 * # 模块 Api 类:
 *  Unread - 未读通知
 * 
 * # 描述:
 *  向用户提供显示在每一个页面侧边的新接收通知的列表。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Pittypat;

namespace Waln.Notifying.Unread
{
    /// <summary>
    /// 提供对模块 未读通知 中功能的封装和调用。
    /// </summary>
    [global::Pittypat.Module(global::Pittypat.ModulePresentation.UI, AllowAnonymous = false)]
    public sealed class Api : global::Pittypat.Module
    {
        #region CountAsync

        /// <summary>
        /// 查询当前用户已经接收到的，尚未读取的通知的总数。
        /// </summary>
        /// <param name="model">功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。</param>
        /// <param name="progress">跟踪和汇报异步操作的进度。</param>
        /// <returns>操作成功返回 通知数目，否则返回 null。</returns>
        public async global::System.Threading.Tasks.Task<global::Pittypat.IJson> CountAsync(
            global::Pittypat.FunctionModel<Args.Count> model,
            global::Pittypat.IAsyncProgress progress)
        {
            // 执行数据操作
            await this.DataService.Exec(model, progress);

            // 如果操作成功，返回通知数目
            return model.Success ? model.Args.Total : null;
        }

        #endregion

        #region ListAsync

        /// <summary>
        /// 查询当前用户已经接收到的新通知的列表。
        /// </summary>
        /// <param name="model">功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。</param>
        /// <param name="progress">跟踪和汇报异步操作的进度。</param>
        /// <returns>操作成功返回所有输出参数的字典，否则返回 null。</returns>
        public async global::System.Threading.Tasks.Task<global::Pittypat.IJson> ListAsync(
            global::Pittypat.FunctionModel<Args.List> model,
            global::Pittypat.IAsyncProgress progress)
        {
            // 执行数据操作
            await this.DataService.Exec(model, progress);

            // 如果操作成功，返回所有输出参数的字典
            return model.Success ? model.OutArgs : null;
        }

        #endregion

        #region ReadAsync

        /// <summary>
        /// 将指定的通知标记为已经阅读。
        /// </summary>
        /// <param name="model">功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。</param>
        /// <param name="progress">跟踪和汇报异步操作的进度。</param>
        /// <returns>操作成功返回 阅读时间，否则返回 null。</returns>
        public async global::System.Threading.Tasks.Task<global::Pittypat.IJson> ReadAsync(
            global::Pittypat.FunctionModel<Args.Read> model,
            global::Pittypat.IAsyncProgress progress)
        {
            // 执行数据操作
            await this.DataService.Exec(model, progress);

            // 如果操作成功，返回阅读时间
            return model.Success ? model.Args.ReadTime : null;
        }

        #endregion
    }
}
